查看原文
其他

如何获取全平台每日热搜——接口篇

爱加班的小刘 爱加班的小刘 2023-09-12

由于公众号的规则调整,您可能无法在订阅号列表中,看到小刘的更新。建议您把 爱加班的小刘 设置为星标,这样更方便找到。路径是:进入公众号→右上角“...”→设为星★标。

今天来做一个每日热点页面,用来接收各个平台实时热搜榜单。

逻辑就是找到平台后台热搜接口,自己后台处理一下数据就能给咱们的前端使用了。

那么可能会有小伙伴会问,那么为什么不直接前端调用各个平台热搜接口呢?

因为跨域问题,只能配置允许跨域或者前端和后端用同一个域名,后端用反代一下接口解决。人家平台肯定不会在后端允许跨域,所以只能用第二种解决了。

和之前搞微信小程序差不多,小程序不允许调用未备案域名的接口,所以折中的办法就是找个已经备案的域名去请求数据,再由备案的域名返回数据给小程序。

找接口

这里以某博作为例子,因为我经常上班等电梯的时候会刷一刷ԅ(¯﹃¯ԅ)。

进入到热搜页面,首先F12调出来页面控制台,选择Fetch/XHR过滤请求,再根据名称来推断函数的作用。通常情况下函数名称和它的作用紧密相关,某博程序员素养非常高,点赞( o`ω′)。

这里这个HotSearch就是获取热搜的函数名称了,看看调用的是哪个接口吧。

既然已经之后接口了,接下来就可以后台处理数据,只把我们需要的数据处理出来就可以了。

处理数据

可以用postman请求一下接口,看看数据结构。

{
   "ok": 1,
   "data": {
       "hotgovs": [
          {
               "flag": 2,
               "name": "#中美鼓岭情缘为何延续至今#",
               "topic_flag": 1,
               "note": "#中美鼓岭情缘为何延续至今#",
               "url": "http://weibo.com/1663072851/N8SFibFSv",
               "pos": 1,
               "small_icon_desc_color": "#ff9406",
               "icon_desc": "热",
               "word": "#中美鼓岭情缘为何延续至今#",
               "mid": "4921167602782591",
               "small_icon_desc": "热",
               "icon_desc_color": "#ff9406",
               "is_gov": 1,
               "is_hot": 1
          }
      ],
       "realtime": [
          {
               "flag": 2,
               "icon_desc": "热",
               "star_name": {},
               "icon_desc_color": "#ff9406",
               "small_icon_desc": "热",
               "small_icon_desc_color": "#ff9406",
               "is_hot": 1,
               "note": "荷兰政府宣布将集体辞职",
               "extension": 2,
               "onboard_time": 1688813492,
               "star_word": 0,
               "fun_word": 0,
               "channel_type": "",
               "ad_info": "",
               "topic_flag": 1,
               "label_name": "热",
               "word_scheme": "#荷兰政府宣布将集体辞职#",
               "realpos": 1,
               "num": 1318435,
               "subject_label": "",
               "word": "荷兰政府宣布将集体辞职",
               "subject_querys": "",
               "mid": "4921233814326440",
               "expand": 0,
               "category": "国外要闻,社会新闻",
               "emoticon": "",
               "raw_hot": 1318435,
               "rank": 0
          },
      "hotgov": {
           "flag": 2,
           "name": "#中美鼓岭情缘为何延续至今#",
           "topic_flag": 1,
           "note": "#中美鼓岭情缘为何延续至今#",
           "url": "http://weibo.com/1663072851/N8SFibFSv",
           "pos": 1,
           "small_icon_desc_color": "#ff9406",
           "icon_desc": "热",
           "word": "#中美鼓岭情缘为何延续至今#",
           "mid": "4921167602782591",
           "small_icon_desc": "热",
           "icon_desc_color": "#ff9406",
           "is_gov": 1,
           "is_hot": 1
      }
}

稍微找了一条来做演示,这里热搜是在realtime字段里。

而我们需要找里面的

  1. 热搜名字 :note

  2. 热搜类型 :category

  3. 热搜热度 :num

  4. 热搜链接 :url

前面三个字段可以直接从接口返回的数据中获得,但是跳转热搜详情的url并没有传进来。

这里我们可以随便找一个热搜,点进去看它的url有没有规律,下面是几个热搜详情的链接。

https://s.weibo.com/weibo?q=%23荷兰政府宣布将集体辞职%23

https://s.weibo.com/weibo?q=%23第一次上交工资就被警察查了%23

https://s.weibo.com/weibo?q=%23小浪底又见黄河之水天上来%23

不难看出除了热搜名变了之外,其他都一样,那么就可以根据这个规律生成热搜详情的链接。

以下是对某博热搜数据处理的java代码,抛砖引玉。

public List<WeiBoHot> getWeiBoHotList(){
   String data = restTemplate.getForObject("https://weibo.com/ajax/side/hotSearch",String.class);
   Map dataMap = JSON.parseObject(data,new TypeReference<Map>(){});
   Map data1 = (Map) dataMap.get("data");
   List<Map<String,String>> hotList = (List)data1.get("realtime");
   List<WeiBoHot> weiBoHotList = new ArrayList<>();
   hotList.forEach(hot->{
       WeiBoHot weiBoHot = WeiBoHot.builder()
                              .category(hot.get("category"))
                              .title(hot.get("note"))
                              .hot(String.valueOf(hot.get("num")))
                              .url("https://s.weibo.com/weibo?q=%23"+hot.get("note")+"%23")
                              .build();
       weiBoHotList.add(weiBoHot);
  });
   return weiBoHotList;
}

下面是处理后的结果

{
   "code": 200,
   "message": "请求成功",
   "data": [
      {
           "category": "幽默",
           "title": "关于自愿离职公司一次性发放十万",
           "hot": "1712800",
           "url": "https://s.weibo.com/weibo?q=%23关于自愿离职公司一次性发放十万%23"
      },
      {
           "category": "国外要闻,社会新闻",
           "title": "荷兰政府宣布将集体辞职",
           "hot": "1127967",
           "url": "https://s.weibo.com/weibo?q=%23荷兰政府宣布将集体辞职%23"
      },
      {
           "category": "社会新闻",
           "title": "小浪底又见黄河之水天上来",
           "hot": "1036609",
           "url": "https://s.weibo.com/weibo?q=%23小浪底又见黄河之水天上来%23"
      },
      {
           "category": "艺人",
           "title": "澳门偶遇",
           "hot": "1036577",
           "url": "https://s.weibo.com/weibo?q=%23澳门偶遇%23"
      },
      {
           "category": "艺人",
           "title": "李玟老公称一直对李玟很好",
           "hot": "1035354",
           "url": "https://s.weibo.com/weibo?q=%23李玟老公称一直对李玟很好%23"
      },
      {
           "category": "影视",
           "title": "泰妃看肖战出场的反应",
           "hot": "1033850",
           "url": "https://s.weibo.com/weibo?q=%23泰妃看肖战出场的反应%23"
      },
      {
           "category": null,
           "title": "紫白金宝宝成长有惊喜",
           "hot": "989876",
           "url": "https://s.weibo.com/weibo?q=%23紫白金宝宝成长有惊喜%23"
      },
      {
           "category": "幽默",
           "title": "90后终于熬成了挂钥匙的那群人",
           "hot": "789548",
           "url": "https://s.weibo.com/weibo?q=%2390后终于熬成了挂钥匙的那群人%23"
      },
      {
           "category": "综艺",
           "title": "Angelababy生孩子期间打上武则天高位",
           "hot": "779800",
           "url": "https://s.weibo.com/weibo?q=%23Angelababy生孩子期间打上武则天高位%23"
      },
      {
           "category": "影视",
           "title": "魏大勋马伯骞赢麻了",
           "hot": "715457",
           "url": "https://s.weibo.com/weibo?q=%23魏大勋马伯骞赢麻了%23"
      },
      {
           "category": "体育",
           "title": "陈梦",
           "hot": "708355",
           "url": "https://s.weibo.com/weibo?q=%23陈梦%23"
      },
      {
           "category": "影视",
           "title": "杨洋和张彬彬 魏大勋和王楚然",
           "hot": "708139",
           "url": "https://s.weibo.com/weibo?q=%23杨洋和张彬彬 魏大勋和王楚然%23"
      },
      {
           "category": "幽默",
           "title": "第一次上交工资就被警察查了",
           "hot": "707220",
           "url": "https://s.weibo.com/weibo?q=%23第一次上交工资就被警察查了%23"
      },
      {
           "category": "音乐",
           "title": "鹿晗好喜欢戴金手链",
           "hot": "657362",
           "url": "https://s.weibo.com/weibo?q=%23鹿晗好喜欢戴金手链%23"
      },
      {
           "category": "体育",
           "title": "德国女生坚持跑步20周成功蜕变",
           "hot": "559402",
           "url": "https://s.weibo.com/weibo?q=%23德国女生坚持跑步20周成功蜕变%23"
      },
      {
           "category": "社会新闻",
           "title": "全国校园音乐大赛总决赛",
           "hot": "430639",
           "url": "https://s.weibo.com/weibo?q=%23全国校园音乐大赛总决赛%23"
      },
      {
           "category": "音乐",
           "title": "TMEA致敬李玟",
           "hot": "397846",
           "url": "https://s.weibo.com/weibo?q=%23TMEA致敬李玟%23"
      },
      {
           "category": "社会正能量",
           "title": "唤醒植物人丈夫后她退还18万元善款",
           "hot": "397292",
           "url": "https://s.weibo.com/weibo?q=%23唤醒植物人丈夫后她退还18万元善款%23"
      },
      {
           "category": "社会新闻",
           "title": "9个孩子被骗缅甸遭电击开水烫",
           "hot": "341643",
           "url": "https://s.weibo.com/weibo?q=%239个孩子被骗缅甸遭电击开水烫%23"
      },
      {
           "category": "游戏",
           "title": "BW2023",
           "hot": "323029",
           "url": "https://s.weibo.com/weibo?q=%23BW2023%23"
      },
      {
           "category": "影视",
           "title": "消失的她票房",
           "hot": "317806",
           "url": "https://s.weibo.com/weibo?q=%23消失的她票房%23"
      },
      {
           "category": "综艺",
           "title": "何炅跟着杨紫一起跪",
           "hot": "315557",
           "url": "https://s.weibo.com/weibo?q=%23何炅跟着杨紫一起跪%23"
      },
      {
           "category": "影视",
           "title": "我的人间烟火 伪骨科",
           "hot": "313546",
           "url": "https://s.weibo.com/weibo?q=%23我的人间烟火 伪骨科%23"
      },
      {
           "category": "影视",
           "title": "长相思",
           "hot": "312093",
           "url": "https://s.weibo.com/weibo?q=%23长相思%23"
      },
      {
           "category": "社会新闻",
           "title": "女生放假回家帮2嫂子带5娃",
           "hot": "309125",
           "url": "https://s.weibo.com/weibo?q=%23女生放假回家帮2嫂子带5娃%23"
      },
      {
           "category": "社会新闻",
           "title": "女儿因蛋糕贵大哭求妈妈退款",
           "hot": "289159",
           "url": "https://s.weibo.com/weibo?q=%23女儿因蛋糕贵大哭求妈妈退款%23"
      },
      {
           "category": "社会新闻",
           "title": "老人游泳误入深海漂浮1小时获救",
           "hot": "279311",
           "url": "https://s.weibo.com/weibo?q=%23老人游泳误入深海漂浮1小时获救%23"
      },
      {
           "category": "音乐",
           "title": "鹿晗回复邓超喊话买单",
           "hot": "279278",
           "url": "https://s.weibo.com/weibo?q=%23鹿晗回复邓超喊话买单%23"
      },
      {
           "category": "艺人",
           "title": "宋轶真的穿白色衣服了",
           "hot": "279248",
           "url": "https://s.weibo.com/weibo?q=%23宋轶真的穿白色衣服了%23"
      },
      {
           "category": "艺人",
           "title": "五月天演唱会歌迷举发光蚊帐被疯狂吐槽",
           "hot": "279243",
           "url": "https://s.weibo.com/weibo?q=%23五月天演唱会歌迷举发光蚊帐被疯狂吐槽%23"
      },
      {
           "category": "社会新闻",
           "title": "小熊猫幼崽和妈妈亲亲",
           "hot": "279198",
           "url": "https://s.weibo.com/weibo?q=%23小熊猫幼崽和妈妈亲亲%23"
      },
      {
           "category": "社会新闻",
           "title": "女子找手机全飞机乘客干等3小时",
           "hot": "278191",
           "url": "https://s.weibo.com/weibo?q=%23女子找手机全飞机乘客干等3小时%23"
      },
      {
           "category": "音乐",
           "title": "汪苏泷演唱会",
           "hot": "273512",
           "url": "https://s.weibo.com/weibo?q=%23汪苏泷演唱会%23"
      },
      {
           "category": "游戏,艺人",
           "title": "花傲天上场",
           "hot": "266122",
           "url": "https://s.weibo.com/weibo?q=%23花傲天上场%23"
      },
      {
           "category": "影视",
           "title": "胡一统都当校长了",
           "hot": "265047",
           "url": "https://s.weibo.com/weibo?q=%23胡一统都当校长了%23"
      },
      {
           "category": "艺人",
           "title": "李玟二姐喊话让知情人站出来",
           "hot": "259244",
           "url": "https://s.weibo.com/weibo?q=%23李玟二姐喊话让知情人站出来%23"
      },
      {
           "category": "音乐",
           "title": "TMEA音乐盛典",
           "hot": "255619",
           "url": "https://s.weibo.com/weibo?q=%23TMEA音乐盛典%23"
      },
      {
           "category": "体育",
           "title": "王楚钦vs莫雷加德",
           "hot": "255031",
           "url": "https://s.weibo.com/weibo?q=%23王楚钦vs莫雷加德%23"
      },
      {
           "category": "社会新闻",
           "title": "猴痘病毒是怎么感染的",
           "hot": "248859",
           "url": "https://s.weibo.com/weibo?q=%23猴痘病毒是怎么感染的%23"
      },
      {
           "category": "体育",
           "title": "亚运会门票",
           "hot": "242707",
           "url": "https://s.weibo.com/weibo?q=%23亚运会门票%23"
      },
      {
           "category": "音乐",
           "title": "威神V全开麦",
           "hot": "223627",
           "url": "https://s.weibo.com/weibo?q=%23威神V全开麦%23"
      },
      {
           "category": "音乐",
           "title": "LESSERAFIM用中文打招呼",
           "hot": "216596",
           "url": "https://s.weibo.com/weibo?q=%23LESSERAFIM用中文打招呼%23"
      },
      {
           "category": "综艺",
           "title": "你好星期六",
           "hot": "206639",
           "url": "https://s.weibo.com/weibo?q=%23你好星期六%23"
      },
      {
           "category": "音乐",
           "title": "汪苏泷北京演唱会",
           "hot": "204911",
           "url": "https://s.weibo.com/weibo?q=%23汪苏泷北京演唱会%23"
      },
      {
           "category": "社会新闻",
           "title": "上海迪士尼回应禁止游客带凳子入园",
           "hot": "186105",
           "url": "https://s.weibo.com/weibo?q=%23上海迪士尼回应禁止游客带凳子入园%23"
      },
      {
           "category": "情感",
           "title": "会谈恋爱的女生是什么样的",
           "hot": "182973",
           "url": "https://s.weibo.com/weibo?q=%23会谈恋爱的女生是什么样的%23"
      },
      {
           "category": "游戏",
           "title": "DYG对战eStar",
           "hot": "181609",
           "url": "https://s.weibo.com/weibo?q=%23DYG对战eStar%23"
      },
      {
           "category": "游戏",
           "title": "TT战胜OMG",
           "hot": "176669",
           "url": "https://s.weibo.com/weibo?q=%23TT战胜OMG%23"
      },
      {
           "category": "作品衍生",
           "title": "群演谈肖战",
           "hot": "175875",
           "url": "https://s.weibo.com/weibo?q=%23群演谈肖战%23"
      },
      {
           "category": "幽默",
           "title": "谁能抵挡吐着粉嫩小舌头的小熊猫",
           "hot": "174833",
           "url": "https://s.weibo.com/weibo?q=%23谁能抵挡吐着粉嫩小舌头的小熊猫%23"
      },
      {
           "category": "音乐",
           "title": "TMEA直播",
           "hot": "173712",
           "url": "https://s.weibo.com/weibo?q=%23TMEA直播%23"
      }
  ]
}

现在这种格式就能让前端调用了。

不过有些平台接口会限定headers,比如某站。如果后端请求时没有配置headers的话会请求失败。

下面是一个设置headers的例子。

HttpHeaders headers = new HttpHeaders();
headers.set("Referer","https://www.bilibili.com/v/popular/rank/all/");
HttpEntity httpEntity = new HttpEntity(headers);

通常情况下设置referer就可以了,更加复杂的需要具体分析。

总结

目前只做了两个,某博和某站。

本来某乎也抓了,可惜只有登录后才能调那个接口,真恶心。

还有的平台没开放api,比如某瓣,现在的想法是爬虫抓,正则匹配抓下来当前热搜。不过那样感觉效率有点低,明天再瞅瞅有啥好方法吧。

最后贴一个今天刚学的前端css实现。

overflow:auto不显示滚动条

::-webkit-scrollbar {
       width: 0px;
}


往期推荐

1. 大姐,这小孩怎么卖啊

2. 超好用的图片压缩工具,压缩率可达80%!

3. 最新开源的DragGAN来了,浏览器抢先体验

4. 三步教你设置网站字体为苹方


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存